#ifndef SELECTIONSORT_H
#define SELECTIONSORT_H

#include "sortalgorithm.h"

// 选择排序类，继承自 SortAlgorithm 接口
class SelectionSort : public SortAlgorithm {
public:
    // 构造函数，接受初始数据数组
    SelectionSort(const QVector<int> &values);

    // 排序过程中的单步执行函数（每次处理一个比较或交换）
    void step() override;

    // 判断排序是否已经完成
    bool isFinished() const override;

    // 获取当前用于可视化的数组数据
    const QVector<SortBar>& getData() const override;

    // 获取并重置当前步中发生的比较次数
    int getAndResetCompareCount() override;

    // 获取并重置当前步中发生的交换次数
    int getAndResetSwapCount() override;

    // 获取当前算法的复杂度说明（平均、最优、最差时间和空间复杂度）
    QString getComplexityInfo() const override;

    // 设置排序顺序（升序或降序）
    void setOrder(SortOrder order) override;

private:
    QVector<SortBar> bars;         // 用于保存每个数据项及其颜色
    int i = 0;                     // 外层循环索引，表示当前位置
    int j = 1;                     // 内层循环索引，扫描剩余未排序部分
    int minIndex = 0;             // 当前找到的最小值（或最大值）的位置
    bool sorted = false;          // 标志是否已排序完成
    int compareCount = 0;         // 记录比较次数
    int swapCount = 0;            // 记录交换次数
    SortOrder sortOrder = SortOrder::Ascending; // 当前排序顺序
};

#endif // SELECTIONSORT_H
